iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0
IT 管理

iTop:開源 ITSM 與 CMDB 解決方案 系列 第 16

iTop 組態管理 Azure Cloud - Microsoft Azure

  • 分享至 

  • xImage
  •  

企業上雲端能夠顯著降低硬體和基礎設施的購置和維護成本,並提供靈活的資源調配,讓企業可以根據需求動態調整資源,確保高可用性和可靠性的服務品質與使用者體驗。

雲端的組態管理與地端系統的整合可能面臨一定的困難,需要仔細規劃和有效的工具支援,才能實現無縫銜接與整合。今天就來教大家如何使用 iTop 提供的 Data Collector for Azure,透過自動化的方式將 Azure 資產組態同步到 iTop 之中。

Data Collector for Microsoft Azure
此外掛程式可讓管理員自動向 iTop 提供相關且準確的 Microsoft Azure 雲端資產組態。

主要執行步驟如下

  • 在 iTop 上安裝 Microsoft Azure 的 Data Model
  • 在 Microsoft Entra ID 中設定 OAuth 2.0 用戶端認證
  • 配置 Data Collector for Microsoft Azure 連線設定
  • 在 iTop 中設定 Azure Subscription 啟用 Discover Objects

安裝 Data Model for Microsoft Azure
您必須在 iTop 上安裝 Microsoft Azure 的資料模型,以獲得相容的資料模型。
https://store.itophub.io/en_US/products/combodo-azure-datamodel

點選 iTop Store 的 CMDB,找到 Data Model for Microsoft Azure 外掛,選擇最新的 2.0.0 Version。

iTop Hub 會自動轉跳到以下畫面,點選 Install。

勾選 Instance Backup,點選 Deploy。

Data Model 安裝成功

點選 Configuration Management 選單的 Azure Cloud

新增了 29 個 Azure 資料模型如下:

  • General:Azure Tenant、Azure Subscription、Azure Resource Group、Azure SKU 與 Azure CI。
  • Compute:Azure Compute 與 Azure VM
  • Storage:Azure Disk、Azure Storage 與 Azure Storage Account
  • Database:Azure DB、Azure DB Server、Azure MS SQL Database、Azure MariaDB Database、Azure MySQL Database 與 Azure PostgreSQL。
  • Container:Azure Container、Azure Kubernetes Service 與 Azure App Service。
  • Networking:Azure Networking、Azure Private Endpoint、Azure VNet、Azure Network Interface、Azure NIC IP Config、Azure Load Balancer、Azure LB Frontend IP Config、Azure VNet Gateway、Azure Public IP Address 與 Azure Subnet。

在 Microsoft Entra ID 中設定 OAuth 2.0 用戶端認證
OAuth 2.0 用戶端認證可允許應用程式在呼叫 Azure REST API 時,使用自己的認證來進行驗證,這類型的授與通常用於必須在背景中執行的伺服器對伺服器互動。當應用程式向 Azure 資源出示權杖時,資源會強制要求應用程式本身具備執行動作的授權,因為使用者不會參與驗證。

Data Collector 呼叫 Web API 取得 Azure 資源需要提供下列的連線資訊

  • Tenant ID
  • Client ID
  • Client Secret

Tenant ID 即是 Azure 的目錄 ID,出現在 Microsoft Entra ID 的 Overview。

Data Collector 使用 Microsoft Entra ID 服務主體連接到 Azure REST API,所以我們必須向 Microsoft Entra ID 註冊應用程序並創建服務主體來管理對 Azure 資源的存取。

進入 Microsoft Entra ID,點選 App Registrations 即可找到 New registration。

輸入應用程序名稱與支援帳號類型,點擊註冊。

註冊成功畫面如下,此時就可以看到 Client ID 了。

點選 Certificates & Secrets 頁面,點選 New Client Secret。填寫描述與效期,點擊新增。

畫面中的 Value 就是我們需要的 Client Secret。

回到 Subscriptions 點擊 Access control(IAM),點擊 Add Role Assignment。

我們指派 Reader 角色,點選 Next。

將我們建立的應用程序加入成員即可,點擊 Review + assign 即可。

權限的 Apply 可能沒這麼即時,有時須等待幾分鐘。

配置 Data Collector for Microsoft Azure 連線設定
此外掛程式無法由 iTop Hub 自動安裝,您必須將其手動部署在運行 PHP 的伺服器上。
https://store.itophub.io/en_US/products/combodo-azure-data-collector

選擇最新的 2.0.0 Version,點選 Download。

下載完後解壓縮到適當位置

sudo unzip combodo-azure-data-collector-2_0_0.zip -d /var/www/html/itop/extensions
sudo chown -R www-data:www-data /var/www/html/itop/extensions/combodo-azure-data-collector

請不要修改 Data Collector 預設的配置檔 params.distrib.xml

如果需要調整配置,請建立名為 params.local.xml 的文件,並將所需的定義複製,使兩個 XML 檔案的結構相同。

不要將 params.local.xml 存放在您的網頁伺服器目錄中,否則您的設定檔中的連線帳密可能外洩。

sudo cp /var/www/html/itop/extensions/combodo-azure-data-collector/conf/params.distrib.xml /etc/itop/params.azure.xml
sudo chown www-data:www-data /etc/itop/params.azure.xml

編輯新增的組態文件

sudo nano /etc/itop/params.azure.xml

應包含用於連接到 iTop 伺服器和 Azure 的參數

<?xml version="1.0" encoding="UTF-8"?>
<!-- Default values for parameters. Do NOT alter this file, use params.local.xml instead -->
<parameters>
  <itop_url>http://your_itop_ip/iTop</itop_url>
  <itop_login>datacollector</itop_login>
  <itop_password>your_datacollector_password</itop_password>
  <itop_token/>
  <itop_login_mode/>

  <!-- Microsoft links -->
  <microsoft_login_url>https://login.microsoftonline.com/</microsoft_login_url>
  <microsoft_auth_mode>/oauth2/token</microsoft_auth_mode>
  <microsoft_resource>https://management.azure.com/</microsoft_resource>
 
  <!-- Client's credentials -->
  <ms_tenantid>your_tenant_id</ms_tenantid>
  <ms_clientid>your_client_id</ms_clientid>
  <ms_clientsecret>your_client_secret</ms_clientsecret>

  <!-- console_log_level: level of logging to console (std output)
  -1 : none, nothing will be logged to the console
   0 : System wide emergency errors only (LOG_EMERG)
   1 : Alert errors (LOG_ALERT)
   2 : Critical errors (LOG_CRIT)
   3 : Application level errors (LOG_ERR)
   4 : Warnings
   5 : Notice
   6 : Information
   7 : Debug traces
   -->
  <console_log_level>6</console_log_level>

  <!-- eventissue_log_level: level of creating event issue object on remote itop
  -1 : none, nothing will be logged to the console
   0 : System wide emergency errors only (LOG_EMERG)
   1 : Alert errors (LOG_ALERT)
   2 : Critical errors (LOG_CRIT)
   3 : Application level errors (LOG_ERR)
   4 : Warnings
   5 : Notice
   6 : Information
   7 : Debug traces
   -->
  <eventissue_log_level>-1</eventissue_log_level>

  <!--
    dateformat: logging date format
    Example: [Y-m-d H:i:s] => will produce a log like "[2020-04-29 14:36:16]    [Info]  ......"
  -->
  <console_log_dateformat>[Y-m-d H:i:s]</console_log_dateformat>

  <!-- syslog_log_level: level of logging to Syslog
  -1 : none, nothing will be logged to syslog
   0 : System wide emergency errors (LOG_EMERG)
   1 : Alert errors (LOG_ALERT)
   2 : Critical errors (LOG_CRIT)
   3 : Application level errors (LOG_ERR)
   4 : Warnings
   5 : Notice
   6 : Information
   7 : Debug traces
   -->
  <syslog_log_level>-1</syslog_log_level>

  <!-- data_path: location where to store the temporary data (.raw and .csv files).
  Make sure that you change this value if you run several instances of the collector
  from the same location (with different configuration files).
  You can use the placeholder %APPROOT% to build a path relative to the location of the collector itself
   -->
  <data_path>%APPROOT%/data</data_path>

  <!-- Maximum number of elements to process in one iteration (for upload and synchro in iTop) -->
  <max_chunk_size>1000</max_chunk_size>
  <!-- Timeout for waiting for the execution of one data synchro task (in seconds) -->
  <itop_synchro_timeout>600</itop_synchro_timeout>
  <!-- Whether or not to stop when an error occurs during a synchronization -->
  <stop_on_synchro_error>no</stop_on_synchro_error>
  <!-- When using cUrl to connect to the iTop Webservices the cUrl options can be specified below
  The syntax is:
  <NAME_OF_THE_OPTION1>VALUE_OF_THE_OPTION1</NAME_OF_THE_OPTION1>
  <NAME_OF_THE_OPTION2>VALUE_OF_THE_OPTION2</NAME_OF_THE_OPTION2>
  etc...

  Where NAME_OF_THE_OPTIONx and VALUE_OF_THE_OPTIONx are either:
  - The numeric value of the option
  - or the string representation of the corresponding PHP "define" (case sensitive)

  The four examples below are equivalent:
   <CURLOPT_SSLVERSION>CURL_SSLVERSION_TLSv1_2</CURLOPT_SSLVERSION>
  or
   <CURLOPT_SSLVERSION>6</CURLOPT_SSLVERSION>
  or
   <32>CURL_SSLVERSION_TLSv1_2</32>
  or
   <32>6</32>

  Since in PHP we have:
  define ('CURLOPT_SSLVERSION', 32);
  define ('CURL_SSLVERSION_TLSv1_2', 6);

  Note: because the recommandation about which is the best SSL/TLS version
        to use varies over time (as security bugs are found in the procotols)
        it is BETTER NOT TO force any SSL/TLS version at all and let the
        system decide which version to use.

        However if the web server running iTop requires a specific TLS/SSL
        version you can use the configuration to force it anyway...
        but be prepared to revisit this setting regularly.
  -->
  <curl_options>
    <CURLOPT_SSL_VERIFYHOST>0</CURLOPT_SSL_VERIFYHOST>
    <CURLOPT_SSL_VERIFYPEER>1</CURLOPT_SSL_VERIFYPEER>
  </curl_options>
</parameters>

接著複寫 Azure Class Parameters,在 collectors/params.disctrib.xml 文件提供了所有需要被收集的 Azure 類別列表與參數。

我們先將 Azure Subscription、Azure Location 與 Azure Resource Group 這三個類別進行複寫。

  <!-- Subscriptions -->
  <azuresubscriptionazurecollector>
    <ms_class>subscriptions</ms_class>
    <api_version>2020-01-01</api_version>
    <jsonfile>/var/www/html/itop/extensions/combodo-azure-data-collector/data/AzureSubscription.json</jsonfile>
    <path>value</path>
    <fields>
      <primary_key>id</primary_key>
      <azureid>id</azureid>
      <azuretenant_id>tenantId</azuretenant_id>
      <name>displayName</name>
      <org_id>My Demo</org_id>
      <provider_id>My Demo</provider_id>
      <subscriptionid>subscriptionId</subscriptionid>
      <status>state</status>
    </fields>
    <defaults>
      <org_id>My Demo</org_id>
      <provider_id>My Demo</provider_id>
      <status>implementation</status>
    </defaults>
  </azuresubscriptionazurecollector>

  <!-- Locations -->
  <azurelocationazurecollector>
    <ms_class>location</ms_class>
    <api_version>2021-04-01-preview</api_version>
    <jsonfile>/var/www/html/itop/extensions/combodo-azure-data-collector/data/AzureLocation.json</jsonfile>
    <path>value</path>
    <fields>
      <primary_key>id</primary_key>
      <code>code</code>
      <name>name</name>
      <org_id>My Demo</org_id>
      <status>state</status>
    </fields>
    <defaults>
      <code></code>
      <org_id>My Demo</org_id>
      <status>active</status>
    </defaults>
  </azurelocationazurecollector>

  <!-- Resources group -->
  <azureresourcegroupazurecollector>
    <ms_class>resourcegroups</ms_class>
    <api_version>2020-09-01</api_version>
    <jsonfile>/var/www/html/itop/extensions/combodo-azure-data-collector/data/AzureResourceGroup.json</jsonfile>
    <path>value</path>
    <fields>
      <primary_key>id</primary_key>
      <azureid>id</azureid>
      <azuresubscription_id>azuresubscription_id</azuresubscription_id>
      <business_criticity>business_criticity</business_criticity>
      <location_id>location</location_id>
      <name>name</name>
      <org_id>My Demo</org_id>
      <provisioning_status>properties/provisioningState</provisioning_status>
    </fields>
    <defaults>
      <azuresubscription_id></azuresubscription_id>
      <business_criticity>medium</business_criticity>
      <org_id>My Demo</org_id>
      <provisioning_status></provisioning_status>
    </defaults>
  </azureresourcegroupazurecollector>

可以針對特定類別不啟用收集,但要注意對於某些類別收集的順序很重要。

  <!-- Class collection sequence -->
  <collectors_launch_sequence type="array">
    <!-- Warning: order is important for some classes: 1 to 3 and , the ones listed with numbers or letters; alphabetical order is ok for others -->
    <!-- Subscriptions -->
    <collector>
      <name>AzureSubscriptionAzureCollector</name>
      <enable>yes</enable>
      <rank>1</rank>
    </collector>
    <!-- Locations -->
    <collector>
      <name>AzureLocationAzureCollector</name>
      <enable>yes</enable>
      <rank>2</rank>
    </collector>
    <!-- Resources group -->
    <collector>
      <name>AzureResourceGroupAzureCollector</name>
      <enable>yes</enable>
      <rank>3</rank>
    </collector>
  </collectors_launch_sequence>

我們先手動執行同步作業

sudo -u www-data /usr/bin/php \
/var/www/html/itop/extensions/combodo-azure-data-collector/exec.php \
--config_file=/etc/itop/params.azure.xml

回到的 Azure Cloud 頁面可以發現 Azure Subscription 已經出現了,但是怎麼沒有 Azure Resource Group。

我們還需要到 Azure Subscription 底下啟用 Discover Objects。

再重新同步一次,就可以看到 Azure Resource Group 與 Azure CI 了。

就不一一列舉組態設定了,大家可以參考下列連結。
https://github.com/jieshiun/itop/blob/main/extensions/combodo-azure-data-collector-2_0_0/combodo-azure-data-collector/conf/params.azure.xml

點進 Resource Group 可以看到已經把用到 Azure 的資源,例如 Computer、 Networking 與 Stroage 關聯好了。

點選 Networking 頁面,包含了 Subnet、NIC IP Config、Public IP Address、VNet 與 Network Interface 等組態都很齊全。

點選 Storage 頁面,可以看到使用了 Storage Account 與 Disk。

點選 Azure VM 則可以看到相關的細節,包含 Disk 與 Network Interface 也都幫我們關聯好了。

確認同步沒有問題之後,記得將指令放入工作排程。

sudo crontab -u www-data -e

依照自己的環境調整頻率,例如每天上午九點執行。

00 09 * * * /usr/bin/php /var/www/html/itop/extensions/combodo-azure-data-collector/exec.php --config_file=/etc/itop/params.azure.xml > /tmp/dc-azure-cron.log 2>&1

今天的分享就到這邊,感謝收看。

參考文件

  1. https://www.itophub.io/wiki/page?id=extensions%3Acombodo-azure-datamodel
  2. https://www.itophub.io/wiki/page?hide%5Bsidebar%5D=1&referer%5Bid%5D=store&referer%5Bpath%5D=%2Fen_US%2Fproducts%2Fcombodo-azure-data-collector&id=extensions%3Acombodo-azure-data-collector
  3. https://learn.microsoft.com/zh-tw/azure/active-directory-b2c/client-credentials-grant-flow?pivots=b2c-user-flow

上一篇
iTop 組態管理 Hypervisor & VM - Virtualization
下一篇
iTop 用戶管理 LDAP User Authentication
系列文
iTop:開源 ITSM 與 CMDB 解決方案 32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言